Systems are very dynamic in that users of the system and devices attached thereto often change on a regular basis. Further, software executed on the system often gets modified and/or updated, and loads on the system periodically fluctuate. There is thus a well established problem of adapting to the ever changing needs of a system.
System adaptation may be required for a number of reasons, both innocent and ill-willed. For example, adaptation may be necessary due to a system being under attack by a hacker, changing system policy, fluctuating system resource utilization, varying availability of different system resources, and/or changing system performance constraints. Preferably, the approach to adaptation is automated as much as possible so as to effect fluid operation as the system adapts to changing conditions.
In some cases, such automation is handled by algorithms used for scheduling the adaptation of various computer resources. Most resource scheduling algorithms are heuristic, i.e. they are based on rules of thumb. This technique generally works well, but often performs poorly when conditions get out of an expected range, or when the system changes unexpectedly. Unfortunately, modern systems change quite often. For example, in a computer network, a set of computer systems communicate with each other via a high speed connection, and the makeup of the system may be in a constant state of flux, as individual computer systems are connected to and disconnected from the network system, and interoperate in various fashions.
In addition to the changes in the computer system configuration, there is also the issue of a constantly changing system workload. The system workload is the combination of all of the work which various components of the system are processing. This system workload changes periodically with the time of day, day of week, and even the time of year, and may also change permanently over time. It is extremely difficult to derive a set of rules or heuristics for resource allocation which anticipates all of these variations in operating conditions.
Changes in a system are thus unpredictable and may occur unexpectedly in real-time. In order to effectively initiate and achieve adaptation, human intervention is often required. As the system changes, a human operator is often relied upon to assess the status of the system, and implement various algorithms or the like for adapting the system to meet the needs of the various components thereof. Unfortunately, this is very cumbersome and subject to error, resulting in a failure to meet the requirements of the various components of the system or system requirements for performance, resource utilization, service availability or security. There is thus a need for a more dynamic, automated method of system adaptation.